/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package de.hsos.samcomm.userManagement.controller;

import de.hsos.samcomm.forumManagement.entity.Forum;
import de.hsos.samcomm.userManagement.entity.Member;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

/**
 * Persitenzklasse der Benutzer.
 *
 * @author felix
 */
@Stateless
public class MemberDAO implements Serializable {

    @PersistenceContext(unitName = "SWA-SamComm-WebPU")
    private EntityManager em;

    /**
     * Fuegt das uebergebene Forum dem Benutzer hinzu.
     *
     * @param m
     * @param f
     */
    public void addForumToSubscription(Member m, Forum f) {
        m.addSubscription(f);
        em.merge(m);
    }

    /// !!!!! HIER MUSS SICH SECURTIY DRUM KUEMMERN
    /// KANN DANN GELOESCHT WERDEN
    public boolean login(String nick, String pwd) {
        List<Member> tmp = this.findMemberByName(nick);

        if (tmp.size() > 0) {
            return tmp.get(0).getPassword().equals(pwd);
        } else {
            return false;
        }
    }

    /**
     * Erstellt einen Benutzer.
     *
     * @param nickname
     * @param email
     * @param passwort
     * @return neuer Benutzer.
     */
    public Member createMember(String nickname, String email, String passwort) {
        Member m = new Member(nickname, email, passwort);
        if (checkNickname(m.getNickname())) {
            em.persist(m);
        } else {
            System.err.println("Member schon vorhanden!");
        }

        return m;
    }

    /**
     * Liefert alle Benutzer.
     *
     * @return alle Benutzer
     */
    public List<Member> getMember() {
        return em.createQuery("SELECT m FROM members m", Member.class).getResultList();
    }

    /**
     * Sucht alle Benutzer mit dem uebergebenen Namen.
     *
     * @param name
     * @return gefilterte Benutzerliste.
     */
    public List<Member> findMemberByName(String name) {
        List<Member> members = new ArrayList<>();
        for(Member m : getMember()) {
            if (m.getNickname().equals(name)) {
                members.add(m);
            }
        }
        return members;
    }

    /**
     * Testet ob der Nickname schon vorhanden ist.
     *
     * @param nickname
     * @return true, wenn nicht vorhanden
     */
    private boolean checkNickname(String nickname) {
        boolean result = true;
        for (Member m : this.getMember()) {
            result = !(m.getNickname().equals(nickname));
        }
        return result;
    }
}
